package homework;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

public class ShoppingCart {

	// 代表购物车 商品id 某一商品
	private Map<String, ShoppingCartItem> items = new HashMap<String, ShoppingCartItem>();

	public Map getItems() {
		return items;
	}

	/**
	 * 向购物车中添加商品，如果商品已经存在，那么更新数量（原有数量+新数量）
	 * 
	 * @param id
	 *            唯一标识一条商品数据
	 * @param name
	 *            商品名称
	 * @param price
	 *            商品价格
	 * @param quantity
	 *            商品数量
	 */
	public void addItem(String id, String name, double price, double quantity) {
		if(items.containsKey(id)){
			quantity+=this.items.get(id).getQuantity();
			items.put(id, new ShoppingCartItem(id,name,price,quantity));
		}else{
			items.put(id, new ShoppingCartItem(id, name, price, quantity));
		}
	}

	/**
	 * 更新购物车某一商品的数量
	 * 
	 * @param id
	 *            唯一标识一条商品数据
	 * @param quantity
	 *            要更新的商品数量
	 */
	public void editCart(String id, double quantity) {
		items.get(id).setQuantity(quantity);
	}

	/**
	 * 删除已选购的某一商品
	 * 
	 * @param id
	 *            唯一标识一条商品数据
	 */
	public void delCart(String id) {
		items.remove(id);
	}

	/**
	 * 获取购物车中所有的商品
	 * 
	 * @return 以List形式返回购物车中所有商品
	 */
	public List getAllCarts() {
		Set<Entry<String, ShoppingCartItem>> set = items.entrySet();
		ArrayList<Entry<String, ShoppingCartItem>> alist = new ArrayList<Entry<String, ShoppingCartItem>>(set);
		Iterator<Entry<String, ShoppingCartItem>> iterator = alist.iterator();
		while(iterator.hasNext()){
			Entry<String, ShoppingCartItem> entry = iterator.next();
		}
		return alist;
	}

	/**
	 * 计算购物车中商品的总金额（商品乘以单价再求和）
	 * 
	 * @return 总金额
	 */
	public double getTotalPrice() {
		double price=0.0;
		List<Entry<String, ShoppingCartItem>> aList=this.getAllCarts();
		Iterator<Entry<String, ShoppingCartItem>> iterator = aList.iterator();
		while(iterator.hasNext()){
			Entry<String, ShoppingCartItem> entry = iterator.next();
			price+=entry.getValue().getQuantity()*entry.getValue().getPrice();
		}
		return price;
	}

}
